#include<bits/stdc++.h>
// #define int long long
#define N 100005
using namespace std;
int T,n,m,a[N],b[N],c[N],K,X[4];
bool mp[N*2],d[20][N];
int lgst(vector<int> v){
    return v[v.size()-1];
}
int win(int x,int y,int top,bool fst,int r){
    if(x>y) swap(x,y);
    bool xw=0,yw=0;
    if(y<=top){
        if(fst&&a[y]>=r) yw=1;
        if(fst&&a[y]<r) xw=1;
        if(!fst&&a[x]>=r) xw=1;
        if(!fst&&a[x]<r) yw=1;
    }
    else if(x<=top){
        if(fst) xw=yw=1;
        if(!fst&&a[x]>=r) xw=1;
        if(!fst&&a[x]<r) yw=1;
    }
    else{
        xw=yw=1;
    }
    if(xw==1&&yw==1) return 2;
    if(xw) return 0;
    return 1;
}
vector<int> fight(vector<int> a,vector<int> b,int top,bool fst,int r){
    vector<int> ans;
    for(auto nx:a){
        for(auto ny:b){
            if(nx>ny) swap(nx,ny);
            int p=win(nx,ny,top,fst,r);
            if(p==0||p==2) mp[nx]=1;
            if(p==1||p==2) mp[ny]=1;
        }
    }
    for(auto nx:a) if(mp[nx]) ans.push_back(nx),mp[nx]=0;
    for(auto ny:b) if(mp[ny]) ans.push_back(ny),mp[ny]=0;
    return ans;
}
int gtn(int x){
    int tmp=1,s=0;
    while(tmp<x) tmp*=2,s++;
    return s;
}
signed main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    ios::sync_with_stdio(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
    for(int i=1;i<=m;i++) cin>>c[i];
    int tmp=1;
    while(tmp<n) tmp*=2,K++;
    char C;
    for(int i=1;i<=K;i++,tmp/=2){
        for(int j=1;j<=tmp/2;j++){
            cin>>C;
            d[i][j]=(C=='1'?1:0);
        }
    }
    cin>>T;
    while(T--){
        for(int i=0;i<4;i++) cin>>X[i];
        for(int i=1;i<=n;i++) a[i]=b[i]^X[i%4];
        // for(int i=1;i<=n;i++) cout<<a[i]<<' ';cout<<endl;
        int res=0;
        for(int i=1;i<=m;i++){
            int tn=c[i];
            int K=gtn(tn);
            int tpt=1;
            for(int j=1;j<=K;j++) tpt*=2;
            int ans=0;
            // cout<<"tpt "<<tpt<<endl;
            vector<vector<int>> alv;
            for(int i=1;i<=tpt;i++){
                vector<int> tmp;tmp.push_back(i);
                alv.push_back(tmp);
            }
            for(int R=1;R<=K;R++){
                vector<vector<int>> nw;
                for(int j=0;j<(int)alv.size();j+=2){
                    nw.push_back(fight(alv[j],alv[j+1],c[i],d[R][j/2+1],R));
                }
                alv=nw;
            }
            for(auto nx:alv[0]) ans+=nx;
            // cout<<endl<<ans<<' ';
            // cout<<endl;
            res^=(ans*i);
        }
        cout<<res<<'\n';
        // cout<<"-----\n";
    }
}

// 18:18 100+100+35+32=267 ji le